﻿/*
 Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.html or http://ckeditor.com/license
 */

CKEDITOR.dialog.add('docProps', function (a) {
    var b = a.lang.docprops, c = a.lang.common, d = {};

    function e(n, o) {
        var p = function () {
            q(this);
            o(this, this._.parentDialog);
        }, q = function (s) {
            s.removeListener('ok', p);
            s.removeListener('cancel', q);
        }, r = function (s) {
            s.on('ok', p);
            s.on('cancel', q);
        };
        a.execCommand(n);
        if (a._.storedDialogs.colordialog)r(a._.storedDialogs.colordialog); else CKEDITOR.on('dialogDefinition', function (s) {
            if (s.data.name != n)return;
            var t = s.data.definition;
            s.removeListener();
            t.onLoad = CKEDITOR.tools.override(t.onLoad, function (u) {
                return function () {
                    r(this);
                    t.onLoad = u;
                    if (typeof u == 'function')u.call(this);
                };
            });
        });
    };
    function f() {
        var n = this.getDialog(), o = n.getContentElement('general', this.id + 'Other');
        if (!o)return;
        if (this.getValue() == 'other') {
            o.getInputElement().removeAttribute('readOnly');
            o.focus();
            o.getElement().removeClass('cke_disabled');
        } else {
            o.getInputElement().setAttribute('readOnly', true);
            o.getElement().addClass('cke_disabled');
        }
    };
    function g(n, o, p) {
        return function (q, r, s) {
            var t = d, u = typeof p != 'undefined' ? p : this.getValue();
            if (!u && n in t)t[n].remove(); else if (u && n in t)t[n].setAttribute('content', u); else if (u) {
                var v = new CKEDITOR.dom.element('meta', a.document);
                v.setAttribute(o ? 'http-equiv' : 'name', n);
                v.setAttribute('content', u);
                s.append(v);
            }
        };
    };
    function h(n, o) {
        return function () {
            var p = d, q = n in p ? p[n].getAttribute('content') || '' : '';
            if (o)return q;
            this.setValue(q);
            return null;
        };
    };
    function i(n) {
        return function (o, p, q, r) {
            r.removeAttribute('margin' + n);
            var s = this.getValue();
            if (s !== '')r.setStyle('margin-' + n, CKEDITOR.tools.cssLength(s)); else r.removeStyle('margin-' + n);
        };
    };
    function j(n) {
        var o = {}, p = n.getElementsByTag('meta'), q = p.count();
        for (var r = 0; r < q; r++) {
            var s = p.getItem(r);
            o[s.getAttribute(s.hasAttribute('http-equiv') ? 'http-equiv' : 'name').toLowerCase()] = s;
        }
        return o;
    };
    function k(n, o, p) {
        n.removeStyle(o);
        if (n.getComputedStyle(o) != p)n.setStyle(o, p);
    };
    var l = function (n, o, p) {
        return {
            type: 'hbox',
            padding: 0,
            widths: ['60%', '40%'],
            children: [CKEDITOR.tools.extend({type: 'text', id: n, label: b[o]}, p || {}, 1), {
                type: 'button',
                id: n + 'Choose',
                label: b.chooseColor,
                className: 'colorChooser',
                onClick: function () {
                    var q = this;
                    e('colordialog', function (r) {
                        var s = q.getDialog();
                        s.getContentElement(s._.currentTabId, n).setValue(r.getContentElement('picker', 'selectedColor').getValue());
                    });
                }
            }]
        };
    }, m = 'javascript:void((function(){' + encodeURIComponent('document.open();' + (CKEDITOR.env.isCustomDomain() ? "document.domain='" + document.domain + "';" : '') + 'document.write( \'<html style="background-color: #ffffff; height: 100%"><head></head><body style="width: 100%; height: 100%; margin: 0px">' + b.previewHtml + "</body></html>' );" + 'document.close();') + '})())';
    return {
        title: b.title, minHeight: 330, minWidth: 500, onShow: function () {
            var n = a.document, o = n.getElementsByTag('html').getItem(0), p = n.getHead(), q = n.getBody();
            d = j(n);
            this.setupContent(n, o, p, q);
        }, onHide: function () {
            d = {};
        }, onOk: function () {
            var n = a.document, o = n.getElementsByTag('html').getItem(0), p = n.getHead(), q = n.getBody();
            this.commitContent(n, o, p, q);
        }, contents: [{
            id: 'general',
            label: c.generalTab,
            elements: [{
                type: 'text', id: 'title', label: b.docTitle, setup: function (n) {
                    this.setValue(n.getElementsByTag('title').getItem(0).data('cke-title'));
                }, commit: function (n, o, p, q, r) {
                    if (r)return;
                    n.getElementsByTag('title').getItem(0).data('cke-title', this.getValue());
                }
            }, {
                type: 'hbox',
                children: [{
                    type: 'select',
                    id: 'dir',
                    label: c.langDir,
                    style: 'width: 100%',
                    items: [[c.notSet, ''], [c.langDirLtr, 'ltr'], [c.langDirRtl, 'rtl']],
                    setup: function (n, o, p, q) {
                        this.setValue(q.getDirection() || '');
                    },
                    commit: function (n, o, p, q) {
                        var r = this.getValue();
                        if (r)q.setAttribute('dir', r); else q.removeAttribute('dir');
                        q.removeStyle('direction');
                    }
                }, {
                    type: 'text', id: 'langCode', label: c.langCode, setup: function (n, o) {
                        this.setValue(o.getAttribute('xml:lang') || o.getAttribute('lang') || '');
                    }, commit: function (n, o, p, q, r) {
                        if (r)return;
                        var s = this.getValue();
                        if (s)o.setAttributes({'xml:lang': s, lang: s}); else o.removeAttributes({
                            'xml:lang': 1,
                            lang: 1
                        });
                    }
                }]
            }, {
                type: 'hbox', children: [{
                    type: 'select',
                    id: 'charset',
                    label: b.charset,
                    style: 'width: 100%',
                    items: [[c.notSet, ''], [b.charsetASCII, 'us-ascii'], [b.charsetCE, 'iso-8859-2'], [b.charsetCT, 'big5'], [b.charsetCR, 'iso-8859-5'], [b.charsetGR, 'iso-8859-7'], [b.charsetJP, 'iso-2022-jp'], [b.charsetKR, 'iso-2022-kr'], [b.charsetTR, 'iso-8859-9'], [b.charsetUN, 'utf-8'], [b.charsetWE, 'iso-8859-1'], [b.other, 'other']],
                    'default': '',
                    onChange: function () {
                        var n = this;
                        n.getDialog().selectedCharset = n.getValue() != 'other' ? n.getValue() : '';
                        f.call(n);
                    },
                    setup: function () {
                        var q = this;
                        q.metaCharset = 'charset' in d;
                        var n = h(q.metaCharset ? 'charset' : 'content-type', 1, 1), o = n.call(q);
                        !q.metaCharset && o.match(/charset=[^=]+$/) && (o = o.substring(o.indexOf('=') + 1));
                        if (o) {
                            q.setValue(o.toLowerCase());
                            if (!q.getValue()) {
                                q.setValue('other');
                                var p = q.getDialog().getContentElement('general', 'charsetOther');
                                p && p.setValue(o);
                            }
                            q.getDialog().selectedCharset = o;
                        }
                        f.call(q);
                    },
                    commit: function (n, o, p, q, r) {
                        var v = this;
                        if (r)return;
                        var s = v.getValue(), t = v.getDialog().getContentElement('general', 'charsetOther');
                        s == 'other' && (s = t ? t.getValue() : '');
                        s && !v.metaCharset && (s = (d['content-type'] ? d['content-type'].getAttribute('content').split(';')[0] : 'text/html') + '; charset=' + s);
                        var u = g(v.metaCharset ? 'charset' : 'content-type', 1, s);
                        u.call(v, n, o, p);
                    }
                }, {
                    type: 'text', id: 'charsetOther', label: b.charsetOther, onChange: function () {
                        this.getDialog().selectedCharset = this.getValue();
                    }
                }]
            }, {
                type: 'hbox',
                children: [{
                    type: 'select',
                    id: 'docType',
                    label: b.docType,
                    style: 'width: 100%',
                    items: [[c.notSet, ''], ['XHTML 1.1', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'], ['XHTML 1.0 Transitional', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'], ['XHTML 1.0 Strict', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'], ['XHTML 1.0 Frameset', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'], ['HTML 5', '<!DOCTYPE html>'], ['HTML 4.01 Transitional', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'], ['HTML 4.01 Strict', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'], ['HTML 4.01 Frameset', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'], ['HTML 3.2', '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'], ['HTML 2.0', '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'], [b.other, 'other']],
                    onChange: f,
                    setup: function () {
                        var o = this;
                        if (a.docType) {
                            o.setValue(a.docType);
                            if (!o.getValue()) {
                                o.setValue('other');
                                var n = o.getDialog().getContentElement('general', 'docTypeOther');
                                n && n.setValue(a.docType);
                            }
                        }
                        f.call(o);
                    },
                    commit: function (n, o, p, q, r) {
                        if (r)return;
                        var s = this.getValue(), t = this.getDialog().getContentElement('general', 'docTypeOther');
                        a.docType = s == 'other' ? t ? t.getValue() : '' : s;
                    }
                }, {type: 'text', id: 'docTypeOther', label: b.docTypeOther}]
            }, {
                type: 'checkbox', id: 'xhtmlDec', label: b.xhtmlDec, setup: function () {
                    this.setValue(!!a.xmlDeclaration);
                }, commit: function (n, o, p, q, r) {
                    if (r)return;
                    if (this.getValue()) {
                        a.xmlDeclaration = '<?xml version="1.0" encoding="' + (this.getDialog().selectedCharset || 'utf-8') + '"?>';
                        o.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
                    } else {
                        a.xmlDeclaration = '';
                        o.removeAttribute('xmlns');
                    }
                }
            }]
        }, {
            id: 'design', label: b.design, elements: [{
                type: 'hbox', widths: ['60%', '40%'], children: [{
                    type: 'vbox', children: [l('txtColor', 'txtColor', {
                        setup: function (n, o, p, q) {
                            this.setValue(q.getComputedStyle('color'));
                        }, commit: function (n, o, p, q, r) {
                            if (this.isChanged() || r) {
                                q.removeAttribute('text');
                                var s = this.getValue();
                                if (s)q.setStyle('color', s); else q.removeStyle('color');
                            }
                        }
                    }), l('bgColor', 'bgColor', {
                        setup: function (n, o, p, q) {
                            var r = q.getComputedStyle('background-color') || '';
                            this.setValue(r == 'transparent' ? '' : r);
                        }, commit: function (n, o, p, q, r) {
                            if (this.isChanged() || r) {
                                q.removeAttribute('bgcolor');
                                var s = this.getValue();
                                if (s)q.setStyle('background-color', s); else k(q, 'background-color', 'transparent');
                            }
                        }
                    }), {
                        type: 'hbox',
                        widths: ['60%', '40%'],
                        padding: 1,
                        children: [{
                            type: 'text', id: 'bgImage', label: b.bgImage, setup: function (n, o, p, q) {
                                var r = q.getComputedStyle('background-image') || '';
                                if (r == 'none')r = ''; else r = r.replace(/url\(\s*(["']?)\s*([^\)]*)\s*\1\s*\)/i, function (s, t, u) {
                                    return u;
                                });
                                this.setValue(r);
                            }, commit: function (n, o, p, q) {
                                q.removeAttribute('background');
                                var r = this.getValue();
                                if (r)q.setStyle('background-image', 'url(' + r + ')'); else k(q, 'background-image', 'none');
                            }
                        }, {
                            type: 'button',
                            id: 'bgImageChoose',
                            label: c.browseServer,
                            style: 'display:inline-block;margin-top:10px;',
                            hidden: true,
                            filebrowser: 'design:bgImage'
                        }]
                    }, {
                        type: 'checkbox', id: 'bgFixed', label: b.bgFixed, setup: function (n, o, p, q) {
                            this.setValue(q.getComputedStyle('background-attachment') == 'fixed');
                        }, commit: function (n, o, p, q) {
                            if (this.getValue())q.setStyle('background-attachment', 'fixed'); else k(q, 'background-attachment', 'scroll');
                        }
                    }]
                }, {
                    type: 'vbox',
                    children: [{
                        type: 'html',
                        id: 'marginTitle',
                        html: '<div style="text-align: center; margin: 0px auto; font-weight: bold">' + b.margin + '</div>'
                    }, {
                        type: 'text',
                        id: 'marginTop',
                        label: b.marginTop,
                        style: 'width: 80px; text-align: center',
                        align: 'center',
                        inputStyle: 'text-align: center',
                        setup: function (n, o, p, q) {
                            this.setValue(q.getStyle('margin-top') || q.getAttribute('margintop') || '');
                        },
                        commit: i('top')
                    }, {
                        type: 'hbox',
                        children: [{
                            type: 'text',
                            id: 'marginLeft',
                            label: b.marginLeft,
                            style: 'width: 80px; text-align: center',
                            align: 'center',
                            inputStyle: 'text-align: center',
                            setup: function (n, o, p, q) {
                                this.setValue(q.getStyle('margin-left') || q.getAttribute('marginleft') || '');
                            },
                            commit: i('left')
                        }, {
                            type: 'text',
                            id: 'marginRight',
                            label: b.marginRight,
                            style: 'width: 80px; text-align: center',
                            align: 'center',
                            inputStyle: 'text-align: center',
                            setup: function (n, o, p, q) {
                                this.setValue(q.getStyle('margin-right') || q.getAttribute('marginright') || '');
                            },
                            commit: i('right')
                        }]
                    }, {
                        type: 'text',
                        id: 'marginBottom',
                        label: b.marginBottom,
                        style: 'width: 80px; text-align: center',
                        align: 'center',
                        inputStyle: 'text-align: center',
                        setup: function (n, o, p, q) {
                            this.setValue(q.getStyle('margin-bottom') || q.getAttribute('marginbottom') || '');
                        },
                        commit: i('bottom')
                    }]
                }]
            }]
        }, {
            id: 'meta',
            label: b.meta,
            elements: [{
                type: 'textarea',
                id: 'metaKeywords',
                label: b.metaKeywords,
                setup: h('keywords'),
                commit: g('keywords')
            }, {
                type: 'textarea',
                id: 'metaDescription',
                label: b.metaDescription,
                setup: h('description'),
                commit: g('description')
            }, {
                type: 'text',
                id: 'metaAuthor',
                label: b.metaAuthor,
                setup: h('author'),
                commit: g('author')
            }, {
                type: 'text',
                id: 'metaCopyright',
                label: b.metaCopyright,
                setup: h('copyright'),
                commit: g('copyright')
            }]
        }, {
            id: 'preview', label: c.preview, elements: [{
                type: 'html',
                id: 'previewHtml',
                html: '<iframe src="' + m + '" style="width: 100%; height: 310px" hidefocus="true" frameborder="0" ' + 'id="cke_docProps_preview_iframe"></iframe>',
                onLoad: function () {
                    this.getDialog().on('selectPage', function (n) {
                        if (n.data.page == 'preview') {
                            var o = this;
                            setTimeout(function () {
                                var p = CKEDITOR.document.getById('cke_docProps_preview_iframe').getFrameDocument(), q = p.getElementsByTag('html').getItem(0), r = p.getHead(), s = p.getBody();
                                o.commitContent(p, q, r, s, 1);
                            }, 50);
                        }
                    });
                    CKEDITOR.document.getById('cke_docProps_preview_iframe').getAscendant('table').setStyle('height', '100%');
                }
            }]
        }]
    };
});
